import scrapy
from DrissionPage import Chromium  # 修改为引入 Chromium
import traceback

# 语法测试
class DynamicSpider(scrapy.Spider):
    name = 'test'
    verify = False
    allowed_domains = ['www.baidu.com']
    start_urls = [
        'http://www.baidu.com'
    ]
    id = 1
    testlist = {'id': 1}

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 初始化 DrissionPage 的 Chromium
        self.browser = Chromium()
        self.tab = self.browser.latest_tab  # 修改为初始化 Chromium

    def start_requests(self):
        # 使用 DrissionPage 打开网页
        self.tab.get(self.start_urls[0])

        # 在这里可以使用 DrissionPage 的方法来获取网页数据
        title = self.tab.title
        self.logger.info(f"tab title: {title}")
        
        self.login_baidu()

        yield scrapy.Request(self.start_urls[0], callback=self.parse)

    def closed(self, reason):
        # 关闭 Drission 的浏览器
        self.browser.quit()

    def login_baidu(self):
        try:
            # 切换到用户名登录
            username_login = self.tab.ele('xpath://*[@id="s-top-loginbtn"]')
            try:
                username_login.click()
            except:
                self.logger.error("已登录")
                return

            # 输入用户名和密码
            username = '18566201325'
            password = 'Mygct123'

            username_input = self.tab.ele('@id=TANGRAM__PSP_11__userName')
            if username_input:
                self.logger.info("输入用户名")
                username_input.input(username)
            else:
                self.logger.error("未找到用户名输入框")

            password_input = self.tab.ele('@id=TANGRAM__PSP_11__password')
            if password_input:
                self.logger.info("输入密码")
                password_input.input(password)
            else:
                self.logger.error("未找到密码输入框")
                return

            self.logger.info("输入完成")

            is_agree = self.tab.ele('@id=TANGRAM__PSP_11__isAgree')
            if is_agree:
                is_agree.check()
            else:
                self.logger.error("未找到协议勾选框")

            # 点击登录按钮
            login_button = self.tab.ele('@id=TANGRAM__PSP_11__submit')
            if login_button:
                login_button.click()
            else:
                self.logger.error("未找到登录按钮")

        except Exception as e:
            # 获取完整的错误追踪信息
            error_traceback = traceback.format_exc()
            self.logger.error(f"登录过程中出现错误: {e}\n{error_traceback}")

    def parse(self, response):
        self.logger.info("开始解析")
        self.logger.info("解析结束")